<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/pvclock-abi.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/pvclock-abi.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfUFZDTE9DS19BQklfSF8w"><span class="b">_ASM_X86_PVCLOCK_ABI_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfUFZDTE9DS19BQklfSF8w"><span class="b">_ASM_X86_PVCLOCK_ABI_H</span></a>
<a name="3" /><span class="True">       3:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__ASSEMBLY__</span>
<a name="4" /><span class="True">       4:</span> 
<a name="5" /><span class="True">       5:</span> <span class="k">/*</span>
<a name="6" /><span class="True">       6:</span> <span class="k"> * These structs MUST NOT be changed.</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> * They are the ABI between hypervisor and guest OS.</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> * Both Xen and KVM are using this.</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> *</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> * pvclock_vcpu_time_info holds the system time and the tsc timestamp</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> * of the last update. So the guest can use the tsc delta to get a</span>
<a name="12" /><span class="True">      12:</span> <span class="k"> * more precise system time.  There is one per virtual cpu.</span>
<a name="13" /><span class="True">      13:</span> <span class="k"> *</span>
<a name="14" /><span class="True">      14:</span> <span class="k"> * pvclock_wall_clock references the point in time when the system</span>
<a name="15" /><span class="True">      15:</span> <span class="k"> * time was zero (usually boot time), thus the guest calculates the</span>
<a name="16" /><span class="True">      16:</span> <span class="k"> * current wall clock by adding the system time.</span>
<a name="17" /><span class="True">      17:</span> <span class="k"> *</span>
<a name="18" /><span class="True">      18:</span> <span class="k"> * Protocol for the &quot;version&quot; fields is: hypervisor raises it (making</span>
<a name="19" /><span class="True">      19:</span> <span class="k"> * it uneven) before it starts updating the fields and raises it again</span>
<a name="20" /><span class="True">      20:</span> <span class="k"> * (making it even) when it is done.  Thus the guest can make sure the</span>
<a name="21" /><span class="True">      21:</span> <span class="k"> * time values it got are consistent by checking the version before</span>
<a name="22" /><span class="True">      22:</span> <span class="k"> * and after reading them.</span>
<a name="23" /><span class="True">      23:</span> <span class="k"> */</span>
<a name="24" /><span class="True">      24:</span> 
<a name="25" /><span class="True">      25:</span> <span class="m">struct</span> <span class="b">pvclock_vcpu_time_info</span> <span class="f">{</span>
<a name="26" /><span class="True">      26:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a>   <span class="b">version</span><span class="f">;</span>
<a name="27" /><span class="True">      27:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a>   <span class="b">pad0</span><span class="f">;</span>
<a name="28" /><span class="True">      28:</span>     <span class="b">u64</span>   <span class="b">tsc_timestamp</span><span class="f">;</span>
<a name="29" /><span class="True">      29:</span>     <span class="b">u64</span>   <span class="b">system_time</span><span class="f">;</span>
<a name="30" /><span class="True">      30:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a>   <span class="b">tsc_to_system_mul</span><span class="f">;</span>
<a name="31" /><span class="True">      31:</span>     <span class="b">s8</span>    <span class="b">tsc_shift</span><span class="f">;</span>
<a name="32" /><span class="True">      32:</span>     <span class="b">u8</span>    <span class="b">flags</span><span class="f">;</span>
<a name="33" /><span class="True">      33:</span>     <span class="b">u8</span>    <span class="b">pad</span><span class="f">[</span><span class="c">2</span><span class="f">]</span><span class="f">;</span>
<a name="34" /><span class="True">      34:</span> <span class="f">}</span> <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">__packed__</span><span class="f">)</span><span class="f">)</span><span class="f">;</span> <span class="k">/* 32 bytes */</span>
<a name="35" /><span class="True">      35:</span> 
<a name="36" /><span class="True">      36:</span> <span class="m">struct</span> <span class="b">pvclock_wall_clock</span> <span class="f">{</span>
<a name="37" /><span class="True">      37:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a>   <span class="b">version</span><span class="f">;</span>
<a name="38" /><span class="True">      38:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a>   <span class="b">sec</span><span class="f">;</span>
<a name="39" /><span class="True">      39:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a>   <span class="b">nsec</span><span class="f">;</span>
<a name="40" /><span class="True">      40:</span> <span class="f">}</span> <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">__packed__</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="41" /><span class="True">      41:</span> 
<a name="42" /><span class="True">      42:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UFZDTE9DS19UU0NfU1RBQkxFX0JJVF8w"><span class="b">PVCLOCK_TSC_STABLE_BIT</span></a>    <span class="f">(</span><span class="c">1</span> <span class="f">&lt;&lt;</span> <span class="c">0</span><span class="f">)</span>
<a name="43" /><span class="True">      43:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UFZDTE9DS19HVUVTVF9TVE9QUEVEXzA_"><span class="b">PVCLOCK_GUEST_STOPPED</span></a>    <span class="f">(</span><span class="c">1</span> <span class="f">&lt;&lt;</span> <span class="c">1</span><span class="f">)</span>
<a name="44" /><span class="True">      44:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* __ASSEMBLY__ */</span>
<a name="45" /><span class="True">      45:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_PVCLOCK_ABI_H */</span>
<a name="46" /><span class="True">      46:</span> </pre>
  </body>
</html>
